﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using PortalCurriculo.Domain;
using PortalCurriculo.WebUI.Helpers;

namespace PortalCurriculo.WebUI.UserControls.Curriculo
{
    public partial class Cargo : UserControl
    {
        public enum Align { Vertical, Horizontal }
        public Align Alignment { get; set; }
        public Unit Width { set { PanelCargo.Width = value; } }
        private static List<Area> Areas { get; set; }

        public DropDownList DropDownCargo
        {
            set { ddlCargo = value; }
            get { return ddlCargo; }
        }

        public DropDownList DropDownArea
        {
            set { ddlArea = value; }
            get { return ddlArea; }
        }

        public DropDownList DropDownEspecializacaoArea
        {
            set { ddlEspecializacaoArea = value; }
            get { return ddlEspecializacaoArea; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            ddlCargo.Attributes.Add("style", "display:block;");

            if (Alignment == Align.Horizontal)
            {
                ddlArea.Attributes.Add("style", "display:inline;");
                ddlEspecializacaoArea.Attributes.Add("style", "display:inline;");
            }
            else
            {
                ddlArea.Attributes.Add("style", "display:block;");
                ddlEspecializacaoArea.Attributes.Add("style", "display:block;");
            }

            PreencherArea();
        }

        protected void ddlArea_SelectedIndexChanged(object sender, EventArgs e)
        {
            PreencherEspecializacaoArea();
        }

        protected void ddlEspecializacaoArea_SelectedIndexChanged(object sender, EventArgs e)
        {
            PreencherCargo();
        }

        public void PreencherEspecializacaoArea()
        {
            if (ddlArea.SelectedValue.Equals("-1"))
            {
                ddlEspecializacaoArea.Items.Clear();
                ddlEspecializacaoArea.Items.Add(new ListItem("(Selecione uma área)", "-1"));
                ddlEspecializacaoArea.SelectedIndex = 0;
                return;
            }

            LimparCargo();

            var especializacaoAreas =
                Areas.Where(area => area.Id == int.Parse(ddlArea.SelectedValue)).FirstOrDefault().EspecializacaoAreas.
                    Where(r => r.Ativo).OrderBy(r => r.Descricao);
            WebHelper.FillDropDownList(ddlEspecializacaoArea, especializacaoAreas, true);
        }

        public void PreencherCargo()
        {
            if (ddlEspecializacaoArea.SelectedValue.Equals("-1"))
            {
                ddlCargo.Items.Clear();
                ddlCargo.Items.Add(new ListItem("(Selecione uma especialização)", "-1"));
                ddlCargo.SelectedIndex = 0;
                return;
            }

            var especializacaoAreas = Areas.Where(area => area.Id == int.Parse(ddlArea.SelectedValue)).FirstOrDefault().EspecializacaoAreas;
            var cargos =
                especializacaoAreas.Where(especializacao => especializacao.Id == int.Parse(ddlEspecializacaoArea.SelectedValue)).
                    FirstOrDefault().Cargoes.Where(c => c.Ativo).OrderBy(c => c.Descricao);
            WebHelper.FillDropDownList(ddlCargo, cargos, true);
        }

        private void PreencherArea()
        {
            if (Areas == null) Areas = new Area().SelecionarAtivos();
            WebHelper.FillDropDownList(ddlArea, Areas, true);

            LimparEspecializacaoArea();
            LimparCargo();
        }

        private void LimparCargo()
        {
            ddlCargo.Items.Clear();
            ddlCargo.Items.Add(new ListItem("(Selecione uma especialização)", "-1"));
            ddlCargo.SelectedIndex = 0;
        }

        private void LimparEspecializacaoArea()
        {
            ddlEspecializacaoArea.Items.Clear();
            ddlEspecializacaoArea.Items.Add(new ListItem("(Selecione uma área)", "-1"));
            ddlEspecializacaoArea.SelectedIndex = 0;
        }

        public void LimparCampos()
        {
            ddlArea.SelectedIndex = 0;
            LimparEspecializacaoArea();
            LimparCargo();
        }
    }
}